home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / gnu / emacs.lha / emacs-19.16 / lisp / help-macro.el < prev    next >
Lisp/Scheme  |  1993-05-26  |  5KB  |  127 lines

  1. ;;; help-macro.el --- Makes command line help such as help-for-help
  2.  
  3. ;; Copyright (C) 1993 Free Software Foundation, Inc.
  4.  
  5. ;; Author: Lynn Slater <lrs@indetech.com>
  6. ;; Created: : Mon Oct  1 11:42:39 1990
  7. ;; Adapted-By: ESR
  8. ;; Last Modified By: Lynn Slater x2048
  9. ;; Last Modified On: Mon Sep 23 14:40:19 1991
  10.  
  11. ;; This file is part of GNU Emacs.
  12.  
  13. ;; GNU Emacs is free software; you can redistribute it and/or modify
  14. ;; it under the terms of the GNU General Public License as published by
  15. ;; the Free Software Foundation; either version 2, or (at your option)
  16. ;; any later version.
  17.  
  18. ;; GNU Emacs is distributed in the hope that it will be useful,
  19. ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  20. ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  21. ;; GNU General Public License for more details.
  22.  
  23. ;; You should have received a copy of the GNU General Public License
  24. ;; along with GNU Emacs; see the file COPYING.  If not, write to
  25. ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  26.  
  27. ;;; Commentary:
  28. ;;
  29. ;;     This file supplies the macro make-help-screen which constructs
  30. ;; single character dispatching with browsable help such as that provided
  31. ;; by help-for-help. This can be used to make many modes easier to use; for
  32. ;; example, the Gnu Emacs Empire Tool uses this for every "nested" mode map
  33. ;; called from the main mode map.
  34.  
  35. ;;       The name of this package was changed from help-screen.el to
  36. ;; help-macro.el in order to fit in a 14-character limit.
  37.  
  38. ;;-> ***********************  Example of use *********************************
  39.  
  40. ;;->(make-help-screen help-for-empire-redistribute-map
  41. ;;->          "c:civ m:mil p:population f:food ?"
  42. ;;->          "You have discovered the GEET redistribution commands
  43. ;;->   From here, you can use the following options:
  44. ;;->
  45. ;;->c    Redistribute civs from overfull sectors into connected underfull ones
  46. ;;->      The functions typically named by empire-ideal-civ-fcn control
  47. ;;->          based in part on empire-sector-civ-threshold  
  48. ;;->m    Redistribute military using levels given by empire-ideal-mil-fcn
  49. ;;->p    Redistribute excess population to highways for max pop growth
  50. ;;->      Excess is any sector so full babies will not be born.
  51. ;;->f    Even out food on highways to highway min and leave levels
  52. ;;->      This is good to pump max food to all warehouses/dist pts
  53. ;;->
  54. ;;->
  55. ;;->Use \\[help-for-empire-redistribute-map] for help on redistribution.
  56. ;;->Use \\[help-for-empire-extract-map] for help on data extraction.
  57. ;;->Please use \\[describe-key] to find out more about any of the other keys."
  58. ;;->          empire-shell-redistribute-map)
  59.  
  60. ;;->  (define-key c-mp "\C-h" 'help-for-empire-redistribute-map)
  61. ;;->  (define-key c-mp help-character 'help-for-empire-redistribute-map)
  62.  
  63. ;;; Change Log:
  64. ;;
  65. ;; 22-Jan-1991        Lynn Slater x2048    
  66. ;;    Last Modified: Mon Oct  1 11:43:52 1990 #3 (Lynn Slater)
  67. ;;    documented better
  68.  
  69. ;;; Code:
  70.  
  71. (provide 'help-macro)
  72. (require 'backquote)
  73.  
  74. (defmacro make-help-screen (fname help-line help-text helped-map)
  75.   "Constructs function FNAME that when invoked shows HELP-LINE and if a help
  76. character is requested, shows HELP-TEXT. The user is prompted for a character
  77. from the HELPED-MAP and the corresponding interactive function is executed."
  78.   (` (defun (, fname) ()
  79.        (, help-text)
  80.        (interactive)
  81.        (let ((line-prompt
  82.           (substitute-command-keys (, help-line))))
  83.          (message line-prompt)
  84.          (let ((char (read-event))
  85.            config)
  86.            (unwind-protect
  87.            (progn
  88.              (if (or (eq char ??) (eq char help-char))
  89.              (progn
  90.                (setq config (current-window-configuration))
  91.                (switch-to-buffer-other-window "*Help*")
  92.                (erase-buffer)
  93.                (insert (documentation (quote (, fname))))
  94.                (goto-char (point-min))
  95.                (while (memq char (cons help-char '(?? ?\C-v ?\ ?\177 ?\M-v)))
  96.                  (if (memq char '(?\C-v ?\ ))
  97.                  (scroll-up))
  98.                  (if (memq char '(?\177 ?\M-v))
  99.                  (scroll-down))
  100.                  (message "%s%s: "
  101.                       line-prompt
  102.                       (if (pos-visible-in-window-p (point-max))
  103.                       "" " or Space to scroll"))
  104.                  (let ((cursor-in-echo-area t))
  105.                    (setq char (read-event))))))
  106.              
  107.              (let ((defn (cdr (assq (if (integerp char) (downcase char) char) (, helped-map)))))
  108.                (if defn
  109.                (if (keymapp defn)
  110.                    (error "sorry, this command cannot be run from the help screen.  Start over.")
  111.                  (if config
  112.                  (progn
  113.                    (set-window-configuration config)
  114.                    (setq config nil)))
  115.                  (call-interactively defn))
  116.              (if (listp char)
  117.                  (setq unread-command-events
  118.                    (cons char unread-command-events)
  119.                    config nil)
  120.                (ding)))))
  121.          (if config
  122.              (set-window-configuration config))))))
  123.      ))
  124.  
  125. ;;; help-macro.el
  126.  
  127.